/**
 * <p>Title: MaterialCodeSvc</p>
 * <p>物料编码管理</p>
 * <p>Copyright: Shanghai Batchsight Pharmaceutical Technologies, Inc. Copyright(c) 2016</p>
 * @author Zuo Yefeng
 * @version 1.0
 * <pre>Histroy:
 *       2016-11-18  Zuo Yefeng  Create
 *</pre>
*/

package cn.jhg.account.service;

import java.util.List;

import cn.jhg.account.entity.MaterialCode;
import cn.jhg.account.util.ServiceResult;

/**
 * @author Yefeng
 * @version 1.0
 * @created 18-11月-2016 10:53:01
 */
public interface MaterialCodeSvc {

	/**
	 * 添加原料编码
	 * @param code	编码
	 * @param sid	签名id
	 * @param iuid	调用人id
	 * @return		编码id，ErrorCode
	 */
	public ServiceResult<Integer> addCode(MaterialCode code, int sid, int iuid);
	// 实体类包含  t_ibcp_material_code 表中字段及 mongodb 中属性
	// 添加前进行编码唯一性检查
	// prop_id 保存属性 id
	// 实际属性保存在 mongodb.ibcp.material_code_property 中
	// 格式：
	// {
	//   属性名1:{value:属性值, type:属性类型, uom:单位, default:默认值, ref:关联TAG名},
	//   属性名2:{value:属性值, type:属性类型, uom:单位, default:默认值, ref:关联TAG名},
	//   属性名3:{value:属性值, type:属性类型, uom:单位, default:默认值, ref:关联TAG名},
    //   ...
	// }

	
	/**
	 * 更新原料编码
	 * @param code	原料代码
	 * @param sid	签名id
	 * @param iuid	调用者id
	 * @return		ErrorCode
	 */
	public ServiceResult<Integer> updateCode(MaterialCode code, int sid, int iuid);
	// 修改前进行编码唯一性检查
	
	/**
	 * 根据代码查询
	 * @param code	编码
	 * @param iuid	调用者 id
	 * @return		MaterialCode 实体，ErrorCode
	 */
	public ServiceResult<MaterialCode> queryByCode(String code, int iuid);

	/**
	 * 根据 ID 查询
	 * @param id	编码id
	 * @param iuid	调用者id
	 * @return		MaterialCode 实体， ErrorCode
	 */
	public ServiceResult<MaterialCode> queryById(int id, int iuid);

	/**
	 * 查询原料代码
	 * @param code		编码（等于空表示全部）
	 * @param name		原料编码名称（等于空表示全部）
	 * @param spec		原料规格（等于空表示全部）
	 * @param typeId	原料类型 id（等于0表示全部）
	 * @param iuid		调用者id
	 * @return			符合条件的原料编码 id 集合，ErrorCode
	 */
	public ServiceResult<List<Integer>> findCode(String code, String name, String spec, int typeId, int iuid);

	/**
	 * 查询原料代码
	 * @param code		编码（等于空表示全部）
	 * @param name		原料编码名称（等于空表示全部）
	 * @param spec		原料规格（等于空表示全部）
	 * @param typeId	原料类型 id（等于0表示全部）
	 * @param iuid		调用者id
	 * @return			符合条件的原料编码实体集合，ErrorCode
	 */
	public ServiceResult<List<MaterialCode>> findCodeDetail(String code, String name, String spec, int typeId, int iuid);

	/**
	 * 失效原料编码
	 * @param id	原料编码id
	 * @param sid	签名id
	 * @param iuid	调用者id
	 * @return		ErrorCode
	 */
	public ServiceResult<Integer> invalidCode(int id, int sid, int iuid);

	/**
	 * 
	 * @param id	删除原料编码
	 * @param sid	签名 id
	 * @param iuid	调用者 id
	 * @return		ErrorCode
	 */
	public ServiceResult<Integer> deleteCode(int id, int sid, int iuid);

	/**
	 * 查询原料详细信息
	 * @param typeId 原料类型id
	 * @param  str  包含code 原料编码 和 name 原料名称
	 * @return	ServiceResult<List<MaterialCode>> 	原料实体集合，ErrorCode
	 */
	public ServiceResult<List<MaterialCode>> findMaterialCodeDetail(int typeId, String str);
	/**
	 * 查询原料详细信息
	 * @param  str  包含code 原料编码 和 name 原料名称
	 * @return	ServiceResult<List<MaterialCode>> 	原料实体集合，ErrorCode
	 */
	public ServiceResult<List<MaterialCode>> findMaterialCodeDetails(String str);
	
}